home *** CD-ROM | disk | FTP | other *** search
/ Freelog 100 / FreelogNo100-NovembreDecembre2010.iso / Musique / solfege / solfege-win32-3.17.0.exe / {app} / bin / Lib / bsddb / test / test_misc.py < prev    next >
Text File  |  2007-12-10  |  3KB  |  102 lines

  1. """Miscellaneous bsddb module test cases
  2. """
  3.  
  4. import os
  5. import sys
  6. import unittest
  7.  
  8. try:
  9.     # For Pythons w/distutils pybsddb
  10.     from bsddb3 import db, dbshelve, hashopen
  11. except ImportError:
  12.     # For Python 2.3
  13.     from bsddb import db, dbshelve, hashopen
  14.  
  15. #----------------------------------------------------------------------
  16.  
  17. class MiscTestCase(unittest.TestCase):
  18.     def setUp(self):
  19.         self.filename = self.__class__.__name__ + '.db'
  20.         homeDir = os.path.join(os.path.dirname(sys.argv[0]), 'db_home')
  21.         self.homeDir = homeDir
  22.         try:
  23.             os.mkdir(homeDir)
  24.         except OSError:
  25.             pass
  26.  
  27.     def tearDown(self):
  28.         try:
  29.             os.remove(self.filename)
  30.         except OSError:
  31.             pass
  32.         import shutil
  33.         shutil.rmtree(self.homeDir)
  34.  
  35.     def test01_badpointer(self):
  36.         dbs = dbshelve.open(self.filename)
  37.         dbs.close()
  38.         self.assertRaises(db.DBError, dbs.get, "foo")
  39.  
  40.     def test02_db_home(self):
  41.         env = db.DBEnv()
  42.         # check for crash fixed when db_home is used before open()
  43.         assert env.db_home is None
  44.         env.open(self.homeDir, db.DB_CREATE)
  45.         assert self.homeDir == env.db_home
  46.  
  47.     def test03_repr_closed_db(self):
  48.         db = hashopen(self.filename)
  49.         db.close()
  50.         rp = repr(db)
  51.         self.assertEquals(rp, "{}")
  52.  
  53.     # http://sourceforge.net/tracker/index.php?func=detail&aid=1708868&group_id=13900&atid=313900
  54.     #
  55.     # See the bug report for details.
  56.     #
  57.     # The problem was that make_key_dbt() was not allocating a copy of
  58.     # string keys but FREE_DBT() was always being told to free it when the
  59.     # database was opened with DB_THREAD.
  60.     def test04_double_free_make_key_dbt(self):
  61.         try:
  62.             db1 = db.DB()
  63.             db1.open(self.filename, None, db.DB_BTREE,
  64.                      db.DB_CREATE | db.DB_THREAD)
  65.  
  66.             curs = db1.cursor()
  67.             t = curs.get("/foo", db.DB_SET)
  68.             # double free happened during exit from DBC_get
  69.         finally:
  70.             db1.close()
  71.             os.unlink(self.filename)
  72.  
  73.     def test05_key_with_null_bytes(self):
  74.         try:
  75.             db1 = db.DB()
  76.             db1.open(self.filename, None, db.DB_HASH, db.DB_CREATE)
  77.             db1['a'] = 'eh?'
  78.             db1['a\x00'] = 'eh zed.'
  79.             db1['a\x00a'] = 'eh zed eh?'
  80.             db1['aaa'] = 'eh eh eh!'
  81.             keys = db1.keys()
  82.             keys.sort()
  83.             self.assertEqual(['a', 'a\x00', 'a\x00a', 'aaa'], keys)
  84.             self.assertEqual(db1['a'], 'eh?')
  85.             self.assertEqual(db1['a\x00'], 'eh zed.')
  86.             self.assertEqual(db1['a\x00a'], 'eh zed eh?')
  87.             self.assertEqual(db1['aaa'], 'eh eh eh!')
  88.         finally:
  89.             db1.close()
  90.             os.unlink(self.filename)
  91.  
  92.  
  93. #----------------------------------------------------------------------
  94.  
  95.  
  96. def test_suite():
  97.     return unittest.makeSuite(MiscTestCase)
  98.  
  99.  
  100. if __name__ == '__main__':
  101.     unittest.main(defaultTest='test_suite')
  102.